Raspberry Pi aluminum case thermal test
Introduction
In this article I will compare the heat development of a Raspberry Pi 3 Model B under stress with and without a case. I bought the Joy-IT armor case "block" for my Raspberry Pi 3 Model B and did some teamperature tests to see if the case manages to passively cool the Raspberry Pi.
Assembly
Before assembling everything, I ensured that the plastic protective film was removed from the included thermal pads. Additionally I made sure that the pads had solid contact with the aluminum case, otherwise they can't transfer the heat from the chip to the case. For the CPU I had to use a combination of one large, thin pad and a slightly smaller but thicker one to ensure the case made direct contact with the pads. The kit came with six thermal pads, of which I used four: one for the RAM, one for the USB/Ethernet controller, and two for the CPU.
Testing methodology
I used the stress package for stress testing. The bash script that I used for stress testing and logging can be seen down below. It will stress test the CPU for 15 minutes and log time, temperature, CPU frequency and whether the CPU thorttled or not every two seconds for a total of 21 minutes.#!/bin/bash
# stress test using the stress package and logging cpu temp and frequency
# Variables.
test_run=1
test_results_file="${HOME}/scripts/stress_log_$test_run.csv"
stress_length="900s"
printf "Log file: $test_results_file\n"
# Start logging temperature data in the background.
while /bin/true; do
line=$(date +"%H:%M:%S" | tr '\n' '\t')
# For Raspberry Pi.
line+=$(vcgencmd measure_temp | tr -d "temp=" | tr -d "'C" | tr '\n' '\t')
line+=$(vcgencmd get_throttled | tr -d "throttled=" | tr '\n' '\t')
line+=$(vcgencmd measure_clock arm | sed 's/^.*=//')
echo $line
echo $line >> $test_results_file
sleep 2
done &
# Store the logging pid.
PROC_ID=$!
# Stop the logging loop if script is interrupted or when it ends.
trap "kill $PROC_ID" EXIT
# After 1 minute, run stress.
printf "Waiting 1 minute for stable idle temperature...\n"
printf "Time °C Status CPU Clock\n"
sleep 60
printf "Beginning $stress_length stress test...\n"
stress -c 4 -t $stress_length
# Keep logging for 5 more minutes.
printf "Waiting 5 minutes to return to idle temperature...\n"
sleep 300
printf "Test complete.\n"
Results
I did 4 tests, 2 without and 2 with the case. I was suprised by the results. With the case the CPU stayed much cooler during the 15 minute stress test.
Without the case the CPU quickly reached its thermal throttle point of 80°C after just 2 minutes. For the first test with the case, the Raspberry Pi was placed on marble and the second test was done on a wodden desk with worse thermal conductivity. In both tests the case fully prevented thermal throttling of the CPU during the 15 minute stress test.
The ambient temperature for the two tests without the case was around 23.5 °C and for the tests with the case it was roughly 22 °C.